Skip to content

Conversation

@thelightway24
Copy link
Contributor

개요

braillify 라이브러리의 기능을 Java 생태계에서 사용할 수 있도록 지원하는 Java 바인딩을 추가합니다.

  • Java 8 호환성: 광범위한 환경 지원을 위해 Java 8을 타겟으로 빌드되었습니다.
  • JNI 기반 구현: Rust 코어 엔진을 활용하기 위해 JNI(Java Native Interface)를 사용하여 바인딩을 구현했습니다.
  • 자동 플랫폼 감지: native-lib-loader를 통해 실행 환경(OS, Arch)에 맞는 네이티브 라이브러리를 자동으로 로드합니다.
  • 샘플 Action 추가: 멀티 플랫폼(Windows, Linux, macOS) 네이티브 라이브러리 빌드 및 JAR 패키징을 위한 샘플 GitHub Action을 추가했습니다.

패키지 구조 (packages/java)

프로젝트의 주요 구조와 구성 요소는 다음과 같습니다.

packages/java/
├── build.gradle.kts          # Gradle 빌드 및 네이티브 라이브러리 패키징 설정
├── Cargo.toml                # Rust JNI 빌드 설정
├── jar/                      # 배포용 JAR 파일
└── src/
    ├── lib.rs                # Rust 코어와 Java를 연결하는 JNI 바인딩 구현
    └── main/
        ├── java/com/devfive/
        │   ├── Braillify.java        # 사용자용 메인 API 및 라이브러리 로더
        │   └── BraillifyException.java # Java 예외 클래스
        └── resources/
            └── natives/      # CI에서 빌드된 플랫폼별 바이너리가 배치되는 경로
                ├── windows-x86_64/   # braillify_java.dll
                ├── linux-x86_64/     # libbraillify_java.so
                └── darwin-aarch64/   # libbraillify_java.dylib

GitHub Actions 설명 (java-release.yml)

  1. build-native-libs (Multi-OS Build):

    • 매트릭스 빌드를 통해 Windows, Linux, macOS(Intel/Silicon)용 네이티브 바이너리를 각각 생성합니다.
    • 생성된 바이너리는 다음 단계를 위해 아티팩트로 보관됩니다.
  2. assemble-jar (Universal Packaging):

    • 빌드된 모든 플랫폼의 바이너리를 수집하여 하나의 JAR 파일로 패키징합니다.
    • 이를 통해 사용자는 단일 JAR 파일만으로 여러 OS 환경에서 braillify를 사용할 수 있습니다.
    • 최종 생성된 JAR는 packages/java/jar 폴더에 자동으로 업데이트됩니다.

추가 논의 필요사항

JNI 구현 방식 등 개선이 필요한 부분이 있다면 언제든 피드백 부탁드립니다. 적극적으로 반영하겠습니다.

  • Maven 저장소 배포
    현재 로컬 빌드 및 JAR 생성을 위한 액션 샘플은 작성하였습니다.
    Maven Central 중앙 저장소에 배포하는 설정 및 권한 관리는 메인테이너분께 확인 및 지원을 부탁드립니다.

  • ** 테스트 추가 필요 **
    추후 기존 csv로 작성된 테스트 케이스를 읽고, 빌드된 jar로 각 os별 테스트를 수행하도록 해야합니다.

테스트

ref #47

@codecov
Copy link

codecov bot commented Jan 12, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions
Copy link
Contributor

Changepacks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants